package main

import (
	"a_plus_station/global"
	"a_plus_station/initialize"
	"go.uber.org/zap"
	//"a_plus_station/utils"
	"flag"
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	//var abPath string
	//_, filename, _, ok := runtime.Caller(0)
	//if ok {
	//	abPath = path.Dir(filename)
	//}

	// 初始化 : 配置 日志 数据库
	initialize.InitConfig("./")
	if err := initialize.InitLogger(&global.ServerConfig.LogConfig); err != nil {
		fmt.Printf("init logger failed, err:%v\n", err)
		return
	}
	initialize.Logger.Debug(fmt.Sprintf("启动服务器，端口 %v", global.ServerConfig))
	zap.S().Infof("启动服务器，端口：%v", global.ServerConfig)
	initialize.Initcaptcha()
	initialize.InitDB()
	initialize.InitEs()
	initialize.InitRedisDB()
	// todo 初始化所有用户的收藏数据
	initialize.AfterCreate()
	// 插入数据到数据库
	// 图片制作 webp

	// 初始化翻译
	err := initialize.InitTrans("zh")
	if err != nil {
		zap.S().Panicf("初始化翻译器错误 %s", err.Error())
		return
	}

	// 初始化validate
	err = initialize.InitMyValidate()
	if err != nil {
		zap.S().Panicf("初始化validate失败 %s", err.Error())
		return
	}

	initialize.InitRequest()
	//生成命令行参数对应的变量，变量为指针类型 覆盖配置文件
	//-ip=0.0.0.0
	//-port=5000
	//IP := flag.String("ip","0.0.0.0","ip地址")
	Port := flag.Int("port", 0, "端口号")

	// 没有传值, 就去系统获取
	//if *IP == "0.0.0.0" {
	//	*Port = utils.GetAvailablePort()
	//	global.ServerConfig.Port = *Port
	//}
	// 命令行优先级
	if *Port != 0 {
		global.ServerConfig.Port = *Port
	}

	// 获取初始化好的router 对象
	Router := initialize.Routers()

	//接受命令行参数
	flag.Parse()
	// 打印进入日志
	//zap.S().Info("ip: ",*IP)
	//zap.S().Info("port: ",*PORT)
	//zap.S().Info("port: ",*port)
	//initialize.Logger.Debug("大家好，日志展示")

	// 创建服务
	go func() {
		err = Router.Run(fmt.Sprintf("%s:%d", global.ServerConfig.Host, global.ServerConfig.Port))
		if err != nil {
			zap.S().Panicf("user服务启动失败 %s", err.Error())
		}
	}()

	// 接收终止信号
	quit := make(chan os.Signal)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
	<-quit

	// 卸载服务
	//err = register_client.DeRegister(serviceId)
	//if err != nil {
	//	zap.S().Panicf("user服务注销失败 %s",err.Error())
	//}
	//zap.S().Info("user服务注销成功")

}

////
//a ProName
//b ProDescription
//c ProSummary
//d AsiProdNo
//e ProductType
//o,p,q,r,s,t,u,v,w,x Color
//y,z,aa Material
//AG Packaging
//aj ItemWeightValue
//al SizesLengthValue
//am SizesWidthValue
//an SizesHeightValue
//ap NumberOfItemsValue
//ar ShippingLengthValue
//as ShippingWidthValue
//at ShippingHeightValue
//av ShippingWeightValue
//ba ImprintSize
//BB ImprintLocation
//BC Keywords
//BL Qty1
//BM NetPrice1

//
